"""
题目描述
给定一个排序数组 nums，你需要在 原地 删除重复出现的元素，使得每个元素只出现一次，返回移除后数组的新长度。

要求：

不能使用额外数组空间，必须在原地修改输入数组。
使用 O(1) 额外空间 的条件下完成。
你不需要考虑数组中超出新长度后面的元素。
示例：

输入：nums = [1,1,2]
输出：2，且 nums 的前两个元素为 [1,2]。
输入：nums = [0,0,1,1,1,2,2,3,3,4]
输出：5，且 nums 的前五个元素为 [0,1,2,3,4]。
"""


def removeDuplicates(nums):
    """
    删除排序数组中的重复项
    
    Args:
        nums: 排序数组
    
    Returns:
        int: 新数组的长度
    """
    # 边界情况：空数组或只有一个元素
    if len(nums) <= 1:
        return len(nums)

    # 使用双指针技术
    # slow 指针指向当前不重复元素的位置
    # fast 指针用于遍历数组寻找下一个不重复元素
    slow = 0

    for fast in range(1, len(nums)):
        # 当发现不同的元素时
        if nums[fast] != nums[slow]:
            # 移动 slow 指针到下一个位置
            slow += 1
            # 将不重复的元素放到 slow 指针位置
            nums[slow] = nums[fast]

    # 返回新数组的长度（slow+1）
    return slow + 1


# 测试代码
if __name__ == "__main__":
    # 测试用例1
    nums1 = [1, 1, 2]
    len1 = removeDuplicates(nums1)
    print(f"输入: [1,1,2]")
    print(f"输出: {len1}，且 nums 的前 {len1} 个元素为 {nums1[:len1]}")

    # 测试用例2
    nums2 = [0, 0, 1, 1, 1, 2, 2, 3, 3, 4]
    len2 = removeDuplicates(nums2)
    print(f"输入: [0,0,1,1,1,2,2,3,3,4]")
    print(f"输出: {len2}，且 nums 的前 {len2} 个元素为 {nums2[:len2]}")

    # 测试用例3：空数组
    nums3 = []
    len3 = removeDuplicates(nums3)
    print(f"输入: []")
    print(f"输出: {len3}，且 nums 的前 {len3} 个元素为 {nums3[:len3]}")

    # 测试用例4：单个元素
    nums4 = [1]
    len4 = removeDuplicates(nums4)
    print(f"输入: [1]")
    print(f"输出: {len4}，且 nums 的前 {len4} 个元素为 {nums4[:len4]}")
